package org.example;

import java.sql.*;
import java.text.MessageFormat;
import java.util.Scanner;

public class Dem01_DriverManager {

    public static void main(String[] args) {

        Connection connection = null;
        Statement statement = null;
        ResultSet resultSet = null;
        try {
            //1.加载数据库厂商的驱动
            // 为什么要加载？
            Class.forName("com.mysql.cj.jdbc.Driver");
            //2.获取数据库连接  固定写法
            connection = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/java113?characterEncoding=utf8" +
                    "&allowPublicKeyRetrieval=true&useSSL=false", "root", "123k456x");
            //3.创建 statement 对象
            //为什么要回去 statement： statement 是java定义的接口  特定作用 就是用来执行sql语句
            statement = connection.createStatement();
            //4.定义sql语句 并执行
            System.out.println("请输入学生姓名：");
            Scanner sc  = new Scanner(System.in);
            // 这里使用 next 会出现问题 next遇到空格会停止读取  nextLine  不会
            String name  = sc.nextLine();
            String sql = "select id,name,sn from stu1 where name  = '"+name+"'";

            //得到结果集 并遍历
            resultSet = statement.executeQuery(sql);
            // 遍历
            while(resultSet.next()){
                //数字表示 列数 就是查询的列
                long stuId = resultSet.getLong(1);
                String stuName  = resultSet.getString(2);
                long stuSn = resultSet.getLong(3);
                //打印 结果 message格式化输出?? 去学
                // String result =  MessageFormat.format(pattern,argument)
                // pattern 是 格式化 语句 { n } n是 占位符 丛0开始
                //argument 可以是多个参数 也可以是数组
                System.out.println(MessageFormat.format("学生编号 = {0},学生姓名 = {1}，学生学号 = {2}",stuId,stuName,stuSn));
            }


            //关闭 连接
            // DriverManager 创建的师 多个 连接 再使用的时候 就不需要 使用 了 需要 就相当于 公司有了以批任务 开始找人 分发 任务做完 给人踹了
        } catch (ClassNotFoundException e) {
            throw new RuntimeException(e);
        } catch (SQLException e) {
            throw new RuntimeException(e);
        }  finally {
            if(resultSet!=null){
                try {
                    resultSet.close();
                } catch (SQLException e) {
                    throw new RuntimeException(e);
                }
            }
            if(statement!=null){
                try {
                    statement.close();
                } catch (SQLException e) {
                    throw new RuntimeException(e);
                }
            }
            if(connection!=null){
                try {
                    connection.close();
                } catch (SQLException e) {
                    throw new RuntimeException(e);
                }
            }
        }

    }

}
